package com.zenithmind.library.pojo.query;

import com.zenithmind.common.query.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 罚金记录查询条件
 *
 * @author ZenithMind
 * @since 2024-06-14
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(name = "罚金记录查询条件", description = "罚金记录查询的条件参数")
public class FineRecordQuery extends BaseQuery {

    @Schema(description = "用户ID", example = "1")
    private String userId;

    @Schema(description = "用户姓名", example = "张三")
    private String userName;

    @Schema(description = "用户学号/工号", example = "20240001")
    private String userNumber;

    @Schema(description = "借阅记录ID", example = "1")
    private String borrowRecordId;

    @Schema(description = "图书标题", example = "Java编程思想")
    private String bookTitle;

    @Schema(description = "图书ISBN", example = "9787111213826")
    private String bookIsbn;

    @Schema(description = "罚金类型 (1-逾期罚金, 2-损坏赔偿, 3-丢失赔偿)", example = "1")
    private Integer fineType;

    @Schema(description = "支付状态 (0-未支付, 1-已支付, 2-部分支付)", example = "0")
    private Integer paymentStatus;

    @Schema(description = "最小罚金金额", example = "0.00")
    private BigDecimal minFineAmount;

    @Schema(description = "最大罚金金额", example = "100.00")
    private BigDecimal maxFineAmount;

    @Schema(description = "最小已支付金额", example = "0.00")
    private BigDecimal minPaidAmount;

    @Schema(description = "最大已支付金额", example = "100.00")
    private BigDecimal maxPaidAmount;

    @Schema(description = "支付方式", example = "支付宝")
    private String paymentMethod;

    @Schema(description = "创建开始日期", example = "2024-01-01")
    private LocalDate createStartDate;

    @Schema(description = "创建结束日期", example = "2024-12-31")
    private LocalDate createEndDate;

    @Schema(description = "支付开始日期", example = "2024-01-01")
    private LocalDate paymentStartDate;

    @Schema(description = "支付结束日期", example = "2024-12-31")
    private LocalDate paymentEndDate;

    @Schema(description = "操作员ID", example = "admin")
    private String operatorId;

    @Schema(description = "操作员姓名", example = "管理员")
    private String operatorName;

    @Schema(description = "排序字段", example = "createTime")
    private String sortField;

    @Schema(description = "排序方向 (asc/desc)", example = "desc")
    private String sortOrder;
}
